Documentation du package ondetools

Pascal Irz

30 mars 2020

Pourquoi ce package ?

Le package ondetools vise à faciliter le chargement et l’exploitation des données de l’observatoire des étiages. Ces données sont téléchargeables depuis l’url suivante.

La logique suivie est celle d’une chaîne de traitements depuis le téléchargement des données brutes sur le web jusqu’à la visualisation cartographique.

Il propose un ensemble de fonctions qui permettent de :
- télécharger les fichiers bruts annuels annuels
- les décompresser
- les assembler
- recoder les régions (fusions)
- pivoter le tableau en format “large”
- compléter les données des stations par des données sur les SAGEs
- calculer les statistiques d’assecs estivaux
- visualiser graphiquement le “tableau de bord” de chacune des stations
- exporter ces graphiques au format .bmp
- visualiser les données en cartographie dynamique

La chaîne de traitements étant dédiée aux données ONDE au format standardisé de leur diffusion, elle ne fonctionne que dans la mesure où l’utilisateur conserve les noms des variables. Le moindre renommage et plus rien ne marche !

Installation

L’installation du package se fait par la fonction library. Pour fonctionner, il fait appel à d’autres packages qui sont aussi installés par défaut quand on installe , ondetools.

library(ondetools)

# autres packages nécessaire pour exécuter les lignes de code ci-dessous
library(tidyverse)
library(sf) 
library(mapview)

Chaque fonction est accompagnée d’un fichier d’aide. Exemple :

?calculer_assecs_ete()

Chargement et mise en forme des données tabulées

Téléchargement des fichiers et stockage

Le stockage par défaut de ces fichiers est dans un sous-répertoire du répertoire de travail "raw_data/fichiers_onde_annuels_zippes".

Vérification que les fichiers annuels zippés sont dans le bon répertoire

Assemblage des fichiers annuels

Il s’agit d’empiler les fichiers annuels.

Vérification que tout s’est bien passé

Les dimensions du tableau de données ou data.frame :

Il y a donc 155308 lignes et 20 colonnes.

Les caractéristiques des variables peuvent être obtenues par la fonction str() :

str(onde)
#> Classes 'data.table' and 'data.frame':   155308 obs. of  20 variables:
#>  $ CdSiteHydro            : chr  "B4540001" "H1001012" "H1060001" "H1140001" ...
#>  $ LbSiteHydro            : chr  "La Thinte à Chaumont" "L'Aisne à Pretz en Argonne" "Le ruisseau de Parfondrupt aux Islettes" "Le ruisseau de Maconrupt à Aubreville" ...
#>  $ Annee                  : int  2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 ...
#>  $ TypeCampObservations   : chr  "complémentaire" "complémentaire" "complémentaire" "complémentaire" ...
#>  $ DtRealObservation      : chr  "2012-05-15" "2012-05-15" "2012-05-15" "2012-05-15" ...
#>  $ LbRsObservationDpt     : chr  "Ecoulement visible acceptable" "Ecoulement visible acceptable" "Ecoulement visible acceptable" "Ecoulement visible acceptable" ...
#>  $ RsObservationDpt       : chr  "1a" "1a" "1a" "1a" ...
#>  $ LbRsObservationNat     : chr  "Ecoulement visible" "Ecoulement visible" "Ecoulement visible" "Ecoulement visible" ...
#>  $ RsObservationNat       : int  1 1 1 1 1 1 1 1 1 1 ...
#>  $ NomEntiteHydrographique: chr  "La Thinte" "L'Aisne" "Ruisseau de Parfonrupt" "Ruisseau de Maconrut" ...
#>  $ CdTronconHydrographique: chr  "B45-0210" "H1--0200" "H1062300" "H1141000" ...
#>  $ LbCommune              : chr  "CHAUMONT-DEVANT-DAMVILLERS" "PRETZ-EN-ARGONNE" "LES ISLETTES" "AUBREVILLE" ...
#>  $ CdCommune              : chr  "55107" "55409" "55253" "55014" ...
#>  $ CdDepartement          : chr  "55" "55" "55" "55" ...
#>  $ LbRegion               : chr  "LORRAINE" "LORRAINE" "LORRAINE" "LORRAINE" ...
#>  $ NomCircAdminBassin     : chr  "RHIN-MEUSE" "SEINE-NORMANDIE" "SEINE-NORMANDIE" "SEINE-NORMANDIE" ...
#>  $ CoordXSiteHydro        : num  876633 857159 845444 850888 846196 ...
#>  $ CoordYSiteHydro        : num  6914591 6875002 6892830 6895708 6875919 ...
#>  $ ProjCoordSiteHydro     : int  26 26 26 26 26 26 26 26 26 26 ...
#>  $ FLG                    : chr  "FLG" "FLG" "FLG" "FLG" ...
#>  - attr(*, ".internal.selfref")=<externalptr>

Gestion des codes régions et création de la variable Mois

Entre le début et la fin de la série, certaines régions ont été regroupées. Pour avoir une cohérence d’ensemble du jeu de données, la variable LbRegion est recodée pour se conformer au découpage régional en 2020. Une variable Mois est créée à partir de la date d’observation. Pour un usage graphique ultérieur, elle est en format alphanumérique à 2 caractères.

filtrage sur le périmètre géographique

Il existe plusieurs variables correspondants aux départements, régions, districts hydrographiques qui permettent de filtrer simplement. Ici, nous nous intéressons aux régions Bretagne et Pays-de-la-Loire.

Gestion des campagnes

La fonction gerer_les_campagnes filtre les données pour ne conserver qu’une observation par mois. De mai à septembre inclus, c’est l’observation de la campagne “usuelle” qui est retenue. D’octobre à avril, c’est la plus sèche des observations “complémentaires”.

Passage en format “large”

Pour certains usages comme la visualisation des observations d’un mois donné (ex : juillet 2018) avec QGIS, il peut être intéressant de disposer des mêmes données, mais avec une colonne par année_mois. La fonction passer_en_format_large() permet cette manipulation en pivotant les cellules à la manière d’un tableau croisé dynamique dans Excel®.

exportation en format CSV

On peut à ce stade exporter les tableaux de données en format texte directement lisible par Excel dans un répertoire “processed_data”.

Nettoyage de l’espace de travail

Construction des objets géographiques

Création de la couche géographique des stations

Il s’agit de transformer le tableau de données au format “long” en objet géographique “points” au moyen de ses colonnes de coordonnées (CoordXSiteHydro et CoordYSiteHydro). Le système de projection est Lambert 93.

Vérification

Chargement de la couche shp des SAGEs

Si l’on dispose d’une couche shapefile des SAGEs, il peut être intéressant de les croiser avec les données d’étiage, par exemple pour produire des tableaux de bord par SAGE.

#> Reading layer `sage_2016_DIR2_shp' from data source `D:\Pascal\boulot\onde\donnees_geographiques_reference\sage_2016_DIR2_shp.shp' using driver `ESRI Shapefile'
#> Simple feature collection with 43 features and 12 fields
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: 123905 ymin: 6559835 xmax: 609715.2 ymax: 6892897
#> epsg (SRID):    NA
#> proj4string:    +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m +no_defs

Vérification

Jointure stations - SAGES

Pour associer à chaque station les données sur son SAGE, jointure spatiale :

Comme en Bretagne - Pays de Loire la couche des SAGE est approximative, il y a des pbs à l’issue de la jointure \(\Rightarrow\) un nettoyage de la couche est nécessaire.

On recherche d’éventuels doublons là où les SAGEs se chevauchent. Pour ce faire, on visualise en rouge les points qui sont des doublons (= situés sur + d’un SAGE).

Il apparaît que le seul problème est le Frout (J3104013), mal affecté à cause du chevauchement entre deux périmètres de SAGE. On corrige manuellement. On garde aussi pour visualisation des stations ONDE hors SAGE mais dans les régions de l’étude.

Caractérisation des assecs

Pour permettre de visualiser la fréquence des assecs sur le périmètre étudié, il est nécessaire d’agréger les données par station. Comme les efforts de collecte de données sont standardisés pour les campagnes “usuelles” (une observation par mois), tandis que les campagnes compléentaires varient fortement d’un département à un autre, seules les premières sont retenues.

Calcul

La fonction calculer_assecs_ete() retourne un dataframe donnant pour chaque station (ligne) le nombre d’observations, le nombre d’assecs et le pourcentage des observations où la station était en assec.

On complète la couche géographique des stations avec ces données.

Si nécessaire, on peut reprojeter en WGS84 - le système utilisé par OpenStreetMap ou GoogleMaps.

vérification visuelle

Si l’on veut vérifier la cohérence des étapes précédentes, on peut visualiser les objets.

Production des graphiques par station

Définition de la légende et de ses codes couleur

On définit une palette de couleurs pour s’assurer qu’une même situation soit systématiquement représentée par une même couleur dans les graphiques.

Le \n est le retour à la ligne pour que les étiquettes ne prennent pas trop de place sur le graphique

Pour les besoins de la représentation graphique, on complète le fichier avec des NA (données manquantes) pour les mois sans observations. La fonction completer_observations_mois_manquants est alors utile.

Essai de la fonction graphique

Liste contenant tous les graphiques

Le logiciel R permet la manipulation de nombreuses classes d’objets parmi lesquelles on trouve les listes. Une liste est un ensemble d’élements qui peuvent être de nature différente. Ici, nous allons créer une liste qui contiendra autant d’objets graphiques qu’il y a de stations.

La fonction produire_graph_pour_toutes_les_stations est une moulinette qui permet d’appliquer la fonction de production du graphique (produire_graph_pour_une_station()) non pas à une station, mais à un ensemble.

Cette liste servira soit pour afficher les graphiques sous la forme de popups dans mapview, soit pour les exporter 1 à 1 en png pour d’autres usages.

Pour vérifier que la liste a bien été créée, on peut afficher certains de ses éléments, par exemple les 10ème à 12ème.

#> 
#> [[2]]

#> 
#> [[3]]

Exportation des graphiques en png

La fonction exporter_les_graphiques_png exporte chacun des graphiques de la liste au format png, le nomme selon les codes SAGEs et station + les intitulés des SAGEs. Ils sont stockés dans le répertoire fourni par l’utilisateur. Si le répertoire n’existe pas, la fonction le crée. Sinon, elle écrase son contenu antérieur. Au final, il y a un fichier par station. L’exécution de la fonction prend environ une seconde par station.

Représentation cartographique

On peut afficher nos résultats dans une fenêtre leaflet au moyen du package mapview avec les popup graphiques.

NB : L’affichage initial prend un peu de temps, variable selon la taille de la région représentée. C’est dû d’une part au chargement des données géographiques et d’autre part au chargement des popups graphiques.


mapviewOptions(basemaps = c("OpenStreetMap", "OpenTopoMap", 
                            "Esri.WorldShadedRelief", "Esri.WorldImagery")) 
# mapviewOptions(default = TRUE) permettrait de revenir au paramétrage par défaut


produire_carte_dynamique (couche_sages = sages,
                          couche_stations = stations_onde_geo,
                          popups_stations = graphiques)